builderparser: Don't needlessly copy requested object names
authorTimm Bäder <mail@baedert.org>
Mon, 12 Sep 2016 19:39:33 +0000 (21:39 +0200)
committerTimm Bäder <mail@baedert.org>
Mon, 31 Oct 2016 18:29:36 +0000 (19:29 +0100)
gtk/gtkbuilderparser.c
gtk/gtkbuilderprivate.h

index 6fdef1c5f67f2b8e99a067a8af2305b8cbffc1d4..b4a9e9cbb8c11222004c4a704dffe498debeb888 100644 (file)
@@ -221,11 +221,11 @@ static gboolean
 is_requested_object (const gchar *object,
                      ParserData  *data)
 {
-  GSList *l;
+  int i;
 
-  for (l = data->requested_objects; l; l = l->next)
+  for (i = 0; data->requested_objects[i]; ++i)
     {
-      if (g_strcmp0 (l->data, object) == 0)
+      if (g_strcmp0 (data->requested_objects[i], object) == 0)
         return TRUE;
     }
 
@@ -1238,14 +1238,8 @@ _gtk_builder_parser_parse_buffer (GtkBuilder   *builder,
 
   if (requested_objs)
     {
-      gint i;
-
       data.inside_requested_object = FALSE;
-      for (i = 0; requested_objs[i]; ++i)
-        {
-          data.requested_objects = g_slist_prepend (data.requested_objects,
-                                                    g_strdup (requested_objs[i]));
-        }
+      data.requested_objects = requested_objs;
     }
   else
     {
@@ -1295,7 +1289,6 @@ _gtk_builder_parser_parse_buffer (GtkBuilder   *builder,
   g_slist_free_full (data.stack, (GDestroyNotify)free_info);
   g_slist_free_full (data.custom_finalizers, (GDestroyNotify)free_subparser);
   g_slist_free (data.finalizers);
-  g_slist_free_full (data.requested_objects, g_free);
   g_free (data.domain);
   g_hash_table_destroy (data.object_ids);
   g_markup_parse_context_free (data.ctx);
index 06b9a7aefc4f41334dabe6f390a2b1a308382fd5..f9c343ff0ecdd8b455cd5c75e249cabb57425a41 100644 (file)
@@ -118,7 +118,7 @@ typedef struct {
   GSList *finalizers;
   GSList *custom_finalizers;
 
-  GSList *requested_objects; /* NULL if all the objects are requested */
+  char **requested_objects; /* NULL if all the objects are requested */
   gboolean inside_requested_object;
   gint requested_object_level;
   gint cur_object_level;